<?php

/*
@版本日期: 2010年5月18日
@著作权所有: 1024 intelligence ( http://www.1024i.com )

获得使用本类库的许可, 您必须保留著作权声明信息.
报告漏洞，意见或建议, 请联系 Lou Barnes(iua1024@gmail.com)
*/

class lib_image extends lib
{
    private $handler = null;
    private $imagick = false;
    private $gd = false;

    // 构造函数
    public function __construct()
    {
        if (class_exists('Imagick'))
        {
            include_once BONE_ROOT . DS . 'libs' . DS . 'image' . DS . 'imagick.php';
            $this->handler = new lib_image_imagick();
            $this->imagick = true;
        }
        else
        {
            include_once BONE_ROOT . DS . 'libs' . DS . 'image' . DS . 'gd.php';
            $this->handler = new lib_image_gd();
            $this->gd = true;
        }
    }

    // 析构函数
    public function __destruct()
    {
        $this->handler = null;
    }
    
    // 检测当前是否为 imagick 处理器
    public function is_imagick()
    {
        return $this->imagick;
    }
    
    // 检测当前是否为  GD 处理器
    public function is_gd()
    {
        return $this->gd;
    }
    
    // 获取处理器
    public function get_handler()
    {
        return $this->handler;
    }

    // 载入图像
    public function open($path)
    {
        return $this->handler->open($path);
    }

    // 截切图像 从 $x, $y 坐标处切取 $width X $height 大小的图像 $width, $height 为空时栽取到边界
    public function crop($x = 0, $y = 0, $width = null, $height = null)
    {
        return $this->handler->crop($x, $y, $width, $height);
    }

    /*
	* 更改图像大小
	$fill_size_type: 
	0: 把图片强制变形成 $width X $height 大小
	1: 按比例在安全框 $width X $height 内缩放图片, 输出缩放后图像大小 不完全等于 $width X $height
	2: 按比例在安全框 $width X $height 内缩放图片，安全框内没有像素的地方填充色, 使用此参数时可设置背景填充色 $bg_color = array(255,255,255)(红,绿,蓝, 透明度) 透明度(0不透明-127完全透明))
	3: 智能模能 缩放图像并载取图像的中间部分 $width X $height 像素大小
	$fill_size_type = 0,1,2 时： 输出完整图像
	$fill_size_type = 3 时, 输出部分图像
	*/
    public function resize_to($width = 100, $height = 100, $fill_size_type = 3, $bg_color = array(255,255,255,127))
    {
        return $this->handler->resize_to($width, $height, $fill_size_type, $bg_color);
    }

    // 添加水印
    public function add_watermark($path, $x = 0, $y = 0)
    {
        return $this->handler->add_watermark($path, $x, $y);
    }

    // 保存到指定路径
    public function save_to($path)
    {
        return $this->handler->save_to($path);
    }

    // 输出图像
    public function output($header = true)
    {
        return $this->handler->output($header);
    }

    public function get_width()
    {
        return $this->handler->get_width();
    }

    public function get_height()
    {
        return $this->handler->get_height();
    }

    // 获取源图像类型
    public function get_type()
    {
        return $this->handler->get_type();
    }

    // 设置图像类型， 默认与源类型一致
    public function set_type($type)
    {
        return $this->handler->set_type($type);
    }

    // 当前对象是否为图片
    public function is_image()
    {
        return $this->handler->is_image();
    }

}
